//package com.wangyadong.hobby.thread.lesson2withconcurrent;
//
//import com.alibaba.dubbo.common.extension.ExtensionLoader;
//
//import java.math.BigInteger;
//import java.util.concurrent.ThreadLocalRandom;
//import java.util.concurrent.atomic.AtomicReference;
//import java.util.stream.IntStream;
//
///**
// * 模拟servlet 产生竞态条件.
// * <p>
// * 加上synchronized才是线程安全的类
// *
// * @author wyd
// * @<code> public synchronized void service() {
// * }
// *
// * </code>
// * @see UnsafeCachingFactorizer#service
// */
//public class UnsafeCachingFactorizer {
//
//    private final AtomicReference<BigInteger> lastNumber = new AtomicReference<>();
//    private final AtomicReference<BigInteger[]> lastFactors = new AtomicReference<>();
//    private final ThreadLocalRandom random = ThreadLocalRandom.current();
//
//
//    public void service() {
//        BigInteger i = extractFromRequest();
//        if (i.equals(lastNumber.get()))
//            encodeIntoResponse(lastFactors.get());
//        else {
//            BigInteger[] factors = factor(i);
//            lastNumber.set(i);
//            lastFactors.set(factors);
//            encodeIntoResponse(factors);
//        }
//    }
//
//    void encodeIntoResponse(BigInteger[] factors) {
//    }
//
//    BigInteger extractFromRequest() {
//        return new BigInteger(String.valueOf(random.nextInt(10)));
//    }
//
//    BigInteger[] factor(BigInteger i) {
//        // Doesn't really factor
//        return new BigInteger[]{i};
//    }
//
//    public static void main(String[] args) {
//        UnsafeCachingFactorizer factorizer = new UnsafeCachingFactorizer();
//        IntStream.range(0, 100).forEach(i -> {
//            new Thread(() -> factorizer.service()).start();
//        });
//        System.out.println("====");
//    }
//}
